Ana içeriğe geç

Zoe'ye Giriş

::: ipucu Beta durumu Agoric platformu beta aşamasındadır. Güvenlik açıkları için resmi olarak değerlendirilme sürecindedir ve ana ağ-1 lansmanını desteklemek için güvenlik tedavisi ve sağlamlaştırma sürecinden geçmektedir. Üretim amaçlı kullanmayınız. :::

Zoe nedir?

Zoe, Agoric'in akıllı sözleşme çerçevesidir. Zoe'yi şu amaçlarla kullanabilirsiniz:

  • Kodunuzu zincir üzerinde çalıştırma
  • Yeni dijital varlıklar oluşturma
  • Güvenilir ticaret varlıkları oluşturma

Zoe, Agoric'in Elektronik Haklar Transfer Protokolü(ERTP) üzerinde belirlenen standartlar ile kurulmuştur.

Neden Zoe kullanıyorsunuz?

Kullanıcılar için

Zoe daha güvenlidir. Geleneksel olarak, dijital varlıkları akıllı bir sözleşme onları kaybetme riskini taşımaktadır. Ama Zoe istediğinizi veya koyduğunuz varlıkların tamamını yada tam bir geri ödemesini garanti ediyor. Hatalı veya kötü niyetli olsa bile bir akıllı sözleşmeyi asla eli boş bırakmayın.

Geliştiriciler için

Zoe daha güvenlidir. Geleneksel olarak akıllı sözleşme yazmak, yeni denenmemiş bir dil öğrenmek demektir ve bu dilde herhangi bir hata yapmamanız gerekmektedir - eğer yaparsanız, kullanıcılarınız milyonlar kaybedebilir.

Ancak, Zoe sözleşmelerini JavaScript'in güvenli bir alt kümesinde yazarsınız. Ayrıca, Zoe tüm kullanıcı dijital varlıklarını otomatik olarak emanet eder ve sonraki ödemelerini yönetir. Hatalara sahip sözleşmeleriniz bile kullanıcıların varlıklarını kaybetmesine neden olamaz.

Zoe ile ilgili Sözleşmeler

Agoric bir dizi örnek sözleşme yazdı. Aşağıdakilere bakabilirsiniz.

  • Otomatik Piyasa Yapıcı (AMM) uygulaması
  • Kapsam dahilindeki bir arama opsiyonu sözleşmesi
  • OTC Masası için piyasa yapıcı sözleşmesi
  • Değiştirilebilir veya değiştirilemez tokenlar için sözleşmeler

Örnek bir Zoe akıllı sözleşmesi kullanma

Katılmak için belirli bir sözleşme örneğine yönelik bir Zoe davetiniz olmalıdır. Arkadaşınız Alice'in Zoe programına katılmanız için bir cüzdanınıza bir sözleşme örneği daveti gönderdiğini düşünelim.

Bu özel davet, bir Atomik Takas sözleşmesi içindir. Bir Atom Takasında, taraflardan biri takas etmek istedikleri dijital varlıkları koyar ve ikinci bir tarafa takası muhtemelen tamamlamaları için bir davetiye gönderir. Bu örnekte Alice takas etmek istediği varlıkları zaten emanet etti ve dijital varlıklarını almak için sizden belirli bir fiyat ödemenizi istiyor.

Bir davetiyeyi inceleme

Peki bir davetiyeniz var ama nasıl kullanıyorsunuz? İlk olarak, Zoe'yi kullanırsın daveti incelemek ve doğrulamak için.

@/snippets/test-intro-zoe.js#details

::: Uyarı Notu

E(), Agoric platformunun bir parçasıdır ve uzak nesnelerdeki yöntemleri çağırmak ve sonuç için bir söz almak için kullanılır. Agoric platformundaki kod, güvenlik için vats adı verilen ayrı ortamlara konur. Zoe kendi teknesinde uzak bir nesnedir, bu yüzden E()'yi kullanmalıyız.

:::

Davetiyeler sözleşmelerinin kurulumu hakkında bilgi içerir. Temelde bu durum, sözleşmenin Zoe'ye yüklenen kaynak kodudur. Bu genel sözleşme kurulumundan, insanlar sözleşmenin belirli örneklerini oluşturmak ve çalıştırmak için Zoe'yi kullanabilirsiniz. Örneğin bir emlak şirketinin bir ev satma sözleşmesi varsa satışa çıkardıkları her bir ev için sözleşmenin bir örneğini oluştururlar.

Bu sözleşmeli yüklemeyi kaynak kodunu satır satır karşılaştırmadan tanıyıp tanımadığınızı hızlı bir şekilde kontrol etmek için nesne kimliği karşılaştırmasını kullanırsınız. Yükleme eşleşirse, davetin bilinmeyen ve muhtemelen kötü amaçlı değil, beklenen sözleşmenin bir örneğine katılmaya yönelik olduğundan emin olursunuz.

@/snippets/test-intro-zoe.js#isCorrectCode

Ancak kurulumu tanımıyorsanız, kodunu doğrudan arayarak inceleyebilirsiniz:

@/snippets/test-intro-zoe.js#inspectCode

Çoğu durumda paket, inceleme için çıkarabileceğiniz base64 kodlu bir zip dosyası içerir:

yankı "$endoZipBase64" | base64 -d > paket.zip
package.zip dosyasını açın

Sözleşmeler, davetlere kendi özel bilgilerini ekleyebilir. Bu durumda Atomic Swap sözleşmesi, neyin alınıp satıldığı hakkında bilgi ekler: Alice'in emanet ettiği asset miktarı ve onu almak için ödemeniz gereken price miktarı. Her ikisinin de kendilerine ait gerçek değeri olmayan dijital varlıkların açıklamaları olduğunu unutmayın.

Teklif verme

Davetiyeyi başarıyla kontrol ettiniz, şimdi bir teklif yapalım

Bir teklifin gerekli üç bölümü vardır:

  • Zoe davetiyesi
  • Teklif
  • Takas etmeyi teklif ettiğiniz dijital varlıkları içeren bir ödeme

Teklif, tekliften ne istediğinizi ve karşılığında ne vereceğinizi belirtir. Zoe, ticarette varlıklarınızı kaybetmemenizi sağlamak için teklifi değişmez olarak kullanır. Bu değişmez teklif güvenliği olarak bilinir.

Teklifinizi yapmak için davetiyenin varlık ve fiyat tutarlarını kullanırsınız. Diyelim ki varlık 3 Moola tutarında ve fiyat 7 Simolean tutarında (Moola ve Simoleans bu örnek için uydurma para birimleridir).

@/snippets/test-intro-zoe.js#ourProposal

Teklifler, büyük harfle başlayan ve ASCII olmayan karakterler içermeyen tanımlayıcı özellikler olan Anahtar Kelimeleri kullanmalıdır. Burada belirli anahtar sözcükler olan Varlık ve Fiyat, sözleşme kodu tarafından belirlenir.

7 Simolean vereceğimi söylediniz, bu yüzden ödeme olarak 7 Simolean göndermelisiniz. Bir Simolean çantasında (belirli bir türdeki dijital varlıkları tutmak için kullanılır) yatan bazı Simoleans'larınız var. Teklifiniz için cüzdanınızdan 7 Simoleans ödemesi çekersiniz ve teklifinizle aynı Anahtar Kelimeyi kullanarak bir nesne inşa edersiniz.give:

@/snippets/test-intro-zoe.js#getPayments

Şimdi yeni oluşturduğunuz teklif ve ödeme nesnelerini sağlamlaştırmanız gerekiyor. Sertleştirme (harden) bir nesneyi geçişli olarak dondurmaktır. Güvenlik nedeniyle, Zoe gibi uzak bir nesneye aktarılacak tüm nesneleri sertleştirmeliyiz.

<<< @/snippets/test-intro-zoe.js#harden

Gerekli parçaları bir araya getirdiniz, şimdi bir teklifte bulunabilirsiniz:

<<< @/snippets/test-intro-zoe.js#offer

Bu noktada, Zoe davetinizin geçerliliğini onaylar ve daveti yanar. Zoe ayrıca, ödemelerinizi şu şekilde temsil ederek emanet eder:

UserSeat'inizi kullanma

Bir kullanıcı UserSeat döndürürken teklifte bulunmak devam eden sözleşme örneğindeki konumunuzu temsil eden (sizin "masaya oturun"). Bu koltuğu aşağıdakiler için kullanabilirsiniz:

  1. Sözleşmeden çıkın.
  2. Mevcut tahsisiniz gibi konumunuz hakkında bilgi alın.
  3. Ödemelerinizi Zoe'den alın.

Teklifinizin başarılı olup olmadığını kontrol edin:

<<< @/snippets/test-intro-zoe.js#offerResult

Teklifinize yanıt olarak, "atomicSwap" sözleşmesi, mesaj: "Teklif kabul edildi. Sözleşme yapıldıktan sonra tamamlandı, lütfen ödemenizi kontrol edin." Diğer sözleşmeler ve teklifler, farklı bir şey iade et. Teklifin sonucu tamamen sözleşme.

Ödeme alma

Bu örneğin "atomicSwap" sözleşmesi, saniyede bir biter taraf doğru varlıkları emanet eder. Moola ödemenizi alabilirsiniz kullandığınız Anahtar Kelimeyle ("Varlık"):

<<< @/snippets/test-intro-zoe.js#getPayout

Alice ödemelerini de alır:

<<< @/snippets/test-intro-zoe.js#alicePayout

Sözleşme yazma ve yükleme

Artık bir sözleşme örneğine nasıl katılacağınızı gördüğünüze göre, hadi bir sözleşmeyi ve örneklerini nasıl oluşturacağınıza bakın.

Alice'in bu sözleşmeyi sıfırdan yazdığını varsayalım. "atomicSwap", Agoric'in örnek sözleşmelerinden biridir (bkz. Atomic Swap) Not: Tüm Zoe sözleşmeleri şu formatta olmalıdır:

::: ayrıntılar Sözleşme biçimini göster <<< @/snippets/contract-format.js#contractFormat :::

Alice, bu kod şablonunu atomicSwap bilgileriyle doldurur. Bu belirli kodu yüklemek için, Alice önce onu zincir dışı paket haline getirmelidir, yani kod ve içe aktarmaları birlikte düzleştirilir:

<<< @/snippets/test-intro-zoe.js#importBundleSource

<<< @/snippets/test-intro-zoe.js#bundle

O zaman Alice onu Zoe'ye yüklemelidir:

<<< @/snippets/test-intro-zoe.js#install

Dönen değer, gördüğümüz bir "kurulum"dur. [daha önce](#davetiyeyi inceleme). O bir Zoe'de yüklü belirli bir kod parçasını tanımlayan nesne. Bu olabilir diğer kurulumlarla karşılaştırılabilir ve arayabilirsiniz Kodun kendisini görmek için "E(atomicSwapInstallation).getBundle()".

Örnek oluşturma

Şimdi Alice, yeni bir örnek oluşturmak için kurulumu kullanıyor. O yapmalı Ayrıca Zoe'ye kullanmak istediği ERTP sağlayıcılarını da belirterek söyleyin. Anahtar Kelimelerdeki rolleri. Alice, Moola'yı emanet ediyordu, bu yüzden "moolaIssuer" öğesini etiketlemek için "Asset" anahtar sözcüğünü kullanın. Simoleans'ı istiyordu, bu yüzden "simoleanIssuer"ı etiketlemek için "Fiyat" anahtar kelimesini kullanıyor.

<<< @/snippets/test-intro-zoe.js#startInstance

Bir sözleşme örneğini oluşturan kişinin bile bir davete ihtiyacı vardır. ona katılmak Alice, döndürülen "creatorInvitation"ı şu amaçlarla kullanır: kendisine gönderilebilecek bir davetiye aldığı bir teklifte bulunmak karşı taraf.

<<< @/snippets/test-intro-zoe.js#aliceOffer

Zoe'nin iki tarafı: Zoe Hizmeti ve Zoe Sözleşmesi Yönü (ZCF)

Sözleşme kodunun start yönteminin bir zcf parametresine sahip olduğunu fark etmiş olabilirsiniz. Bu, Zoe Sözleşmesi Yönüdür. Zoe'nin iki tarafı vardır: Kullanıcıların etkileşime girdiğini gördüğünüz Zoe Hizmeti ve sözleşme koduyla erişilebilen Zoe Sözleşme Yönü (ZCF). Kullanıcıların Zoe Hizmetine erişimi olduğunu ancak ZCF'ye erişimi olmadığını unutmayın. Sözleşme kodunun ZCF'ye erişimi vardır ve Zoe Hizmetine erişebilir.

Zoe Hizmeti, Zoe Sözleşme Yönü ve Zoe Helper API'leri hakkında daha fazla bilgi edinmek için Zoe API belgelerimize bakın.

Sonraki adımlar

Zoe'nin nasıl çalıştığına ve neler yapabileceğinize daha derinlemesine dalmak istiyorsanız, Zoe Kılavuzu'na gidin.

Atomic Swap sözleşmesi hakkında daha fazla bilgi edinmek için belgelerini okuyabilir ve kaynak koduna bakabilirsiniz. Sözleşmeler klasöründe farklı işlem türleri için birkaç başka örnek sözleşme vardır.

Zoe sözleşmelerini ve uygulamalarını (dapp'ler) oluşturmaya başlamak için, önkoşulları yükledikten sonra Proje Başlatma bölümündeki talimatları izleyin.

Zoe Hizmeti ve Zoe Sözleşme Yönü API'lerini keşfetmek için, burada Zoe API belgelerine bakın.